#ifndef _ECRAN_H
#define _ECRAN_H

#include <vector>
#include "Couleur.hpp"

typedef std::vector < std::vector < Couleur > > matrice;

/**
 * Classe abstraite implémentant un tableau bidimensionnel de
 * Couleur. Cet Ecran est la "pellicule" utilisée par Camera pour
 * fixer la scène.
 *
 * Un Ecran n'a comme attributs uniquement les deux dimensions
 * (hauteur et largeur), plus un ensemble de méthodes virtuelles
 * pures.
 *
 * @author Jean-Marc Comby + Romain Dequesne
 * @author Johan "Solo" Luisier
 *
 * @date 28 Avril 2004
 */
class Ecran
{
 protected:
  /**
   * Largeur de l'Ecran.
   */
  unsigned int Largeur; 
  /**
   * Hauteur de l'Ecran.
   */
  unsigned int Hauteur;
	
 public:	
  Ecran(const unsigned int& lar = 0, const unsigned int& haut = 0);
  virtual ~Ecran();
  /**
   * Permet de modifier la Hauteur de l'Ecran.
   *
   * @param h nouvelle valeur de la Hauteur.
   */
  virtual void hauteur(const unsigned int& h) = 0;
  /**
   * Permet de modifier la Largeur de l'Ecran.
   *
   * @param l nouvelle valeur de la Largeur.
   */
  virtual void largeur(const unsigned int& l) = 0;
  /**
   * Permet de récupérer la Hauteur de l'Ecran
   */
  virtual const unsigned int& hauteur() const = 0;
  /**
   * Permet de récupérer la Largeur de l'Ecran
   */
  virtual const unsigned int& largeur() const = 0;
  /**
   * Méthode permettant de fixer la Couleur d'un élément du tableau.
   *
   * @param x position x du pixel.
   * @param y position y du pixel.
   * @param coul couleur du pixel.
   */
  virtual void setPixel(const unsigned int &x, const unsigned int &y,
			const Couleur& coul) = 0;
  /**
   * Méthode permettant de récupérer la Couleur d'un élément du
   * tableau.
   *
   * @param x position x du pixel.
   * @param y position y du pixel.
   */
  virtual const Couleur& pixel(const unsigned int &x,
			       const unsigned int &y) const = 0;
};

#endif
